﻿1.相机SDK接口库（参考文档安装目录\用户手册\VSensorLaserSDK_API_CHS.chm）

2.c#库依赖c++dll编译后务必导入相应库

3.anucpu下可直接调用x64版本的dll，接口如下，与c++接口略不同
/*******************************************************************
*名称：              GetSdkVersionString
*功能：              获取SDK版本号
*入口参数：
version		         SDK版本号
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetSdkVersionString(String^% version);
/*******************************************************************
*名称：              GetDeviceList
*功能：              获取参数列表
*入口参数：
cameraInfo           相机列表信息
iNums                相机个数
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetDeviceList(List<VSensorLaserCameraInfoCLR^>^% cameraInfo, int% iNums);
/*******************************************************************
*名称：              GetDeviceIP
*功能：              获取设备网络地址
*入口参数：
deviceName           相机名称
addr				 相机IP
mask               	 相机子网掩码
gateWay				 相机网关
etAddr				 网卡IP
etMask				 网卡子网掩码
etGateWay			 网卡网关
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetDeviceIP(String^ deviceName, String^% addr, String^% mask, String^% gateWay, String^% etAddr, String^% etMask, String^% etGateWay);
/*******************************************************************
*名称：              SetDeviceIP
*功能：              设置设备网络地址(该函数仅在相机断连时可调用)
*入口参数：
deviceName           相机名称
addr				 相机IP(如:192.168.1.100)
mask               	 相机子网掩码(如:255.255.255.0)
gateWay				 相机网关(如:192.168.1.1)
bPersistent          true:设置相机为固定IP   false:设置相机自动分配IP(忽略参数addr，mask，gateWay)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetDeviceIP(String^ deviceName, String^ addr, String^ mask, String^ gateWay, bool bPersistent);
/*******************************************************************
*名称：              SetDeviceSysOption
*功能：              配置系统选项(需要在DeviceConnect连接设备之前配置)
*入口参数：
optionName           选项
value                值
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetDeviceSysOption(String^ optionName, String^ value);
/*******************************************************************
*名称：              DeviceConnect
*功能：              设备连接
*入口参数：
iDeviceIndex         需要连接的相机索引
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int DeviceConnect(int iDeviceIndex);
/*******************************************************************
*名称：              GetDeviceCustomSN
*功能：              获取设备自定义序列号
*入口参数：
serialNumber         自定义序列号
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetDeviceCustomSN(String^% serialNumber);
/*******************************************************************
*名称：              SetDeviceCustomSN
*功能：              设置设备自定义序列号
*入口参数：
serialNumber         自定义序列号
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetDeviceCustomSN(String^ serialNumber);
/*******************************************************************
*名称：              GetCamInternelParameter
*功能：              获取相机内参
*入口参数：
para                 相机内参
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetCamInternelParameter(array<double>^% para);
/*******************************************************************
*名称：              GetPara
*功能：              获取标定参数
*入口参数：
para                 相机标定参数
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetPara(array<double>^% para);
/*******************************************************************
*名称：              ResetUserSettingData
*功能：              重置用户设置数据
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ResetUserSettingData();
/*******************************************************************
*名称：              LoadUserSettingData
*功能：              加载用户设置数据
*入口参数：
filePath			 加载设置文件，支持格式ini(加载该路径下的用户设置文件至设备内部并生效设置参数)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int LoadUserSettingData(String^ filePath);
/*******************************************************************
*名称：              SaveUserSettingData
*功能：              保存用户设置数据
*入口参数：
filePath			 保存路径(保存设备内部的用户设置数据至该路径)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SaveUserSettingData(String^ filePath);
/*******************************************************************
*名称：              SetZaxisRange
*功能：              设置当前Z轴范围
*入口参数：
min					 最小值
max					 最大值
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetZaxisRange(int min, int max);
/*******************************************************************
*名称：              GetZaxisRange
*功能：              获取当前Z轴范围
*入口参数：
min					 最小值
max					 最大值
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetZaxisRange(int% min, int% max);
/*******************************************************************
*名称：              SetProjectLight
*功能：              设置投影等级
*入口参数：
level                投影等级，范围0 - 2，等级越高投影越亮(注:激光器在15min之内未采集点云投影等级会自动设置为0，PSN3000系列投影等级范围0 - 1)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetProjectLight(int level);
/*******************************************************************
*名称：              GetProjectLight
*功能：              获取投影等级
*入口参数：
level                投影等级
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetProjectLight(int% level);
/*******************************************************************
*名称：              GetExposureTime
*功能：              获取曝光时间
*入口参数：
exposureTime         曝光时间，单位为ms
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetExposureTime(double% exposureTime);
/*******************************************************************
*名称：              SetExposureTime
*功能：              设置曝光时间
*入口参数：
exposureTime         曝光时间，单位为ms，范围0.01 - 20.00，采集预览模式 MODE_SPSOFT 下范围0.01 - 500.00
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetExposureTime(double exposureTime);
/*******************************************************************
*名称：              SetAutoExposureTime
*功能：              设置自动曝光(功能预留暂不支持)
*入口参数：
isOpen               自动曝光开关
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetAutoExposureTime(bool isOpen);
/*******************************************************************
*名称：              SetFrameRate
*功能：              设置帧速率，该接口设置连续采集下的帧率等级，该等级为当前理论输出的最大帧率的百分比，最大帧率非固定值受曝光和ROI设置共同影响
*入口参数：
level                帧率等级，范围1 - 100
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetFrameRate(int level);
/*******************************************************************
*名称：              SetAlgoMode
*功能：              设置算法模式(此接口仅支持部分设备如有需要联系相关销售人员)
*入口参数：
flag                 0:常规算法  1:抗弧光算法
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetAlgoMode(int flag);
/*******************************************************************
*名称：              SetLineSelectMode
*功能：              设置光条筛选模式
*入口参数：
minLight		     最低亮度，范围0 - 255
maxLight             最高亮度，范围0 - 255
minWidth			 最小线宽，范围1 - 50
maxWidth			 最大线宽，范围1 - 50
mode			     0:标准  1:亮度优先(选择亮度最高)  2:线宽优先(选择线宽最小)  3:距离最近  4:距离最远
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetLineSelectMode(int minLight, int maxLight, int minWidth, int maxWidth, int mode);
/*******************************************************************
*名称：              SetHDR
*功能：              设置高动态采集模式
*入口参数：
exposureTime1		 曝光时间1，单位为ms，范围0.01 - 20.00
exposureTime2        曝光时间2，单位为ms，范围0.01 - 20.00
isOpen			     HDR开关
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetHDR(double exposureTime1, double exposureTime2, bool isOpen);
/*******************************************************************
*名称：              GetHDR
*功能：              获取高动态采集模式曝光参数
*入口参数：
exposureTime1		 曝光时间1，单位为ms
exposureTime2        曝光时间2，单位为ms
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetHDR(double% exposureTime1, double% exposureTime2);	
/******************************************************************
* 名称：			 SetOutlierDetect
* 功能：			 设置离散点
* 入口参数：		    
* window			 离散窗口，范围2 - 7，取值越小离散点去除越弱
* threshold			 离散阈值，范围1.0 - 10.0，取值越小离散点去除越强
* isOpen			 离散开关
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int SetOutlierDetect(int window, float threshold, bool isOpen);
/******************************************************************
* 名称：			 SetFilter1
* 功能：			 设置滤波1
* 入口参数：		    
* window			 滤波窗口，范围2 - 7
* isOpen			 滤波开关
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int SetFilter1(int window, bool isOpen);
/******************************************************************
* 名称：			 SetFilter2
* 功能：			 设置滤波2
* 入口参数：		    
* window			 滤波窗口，范围2 - 7
* isOpen			 滤波开关
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int SetFilter2(int window, bool isOpen);
/******************************************************************
* 名称：			 CloudOutlierDetect
* 功能：			 点云离散点
* 入口参数：		    
* resultCLR			 点云数据
* window			 离散窗口，范围2 - 7，取值越小离散点去除越弱
* threshold			 离散阈值，范围1.0 - 10.0，取值越小离散点去除越强
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int CloudOutlierDetect(VSensorLaserResultCLR^ resultCLR, int window, float threshold);
/******************************************************************
* 名称：			 CloudFilter1
* 功能：			 点云滤波1
* 入口参数：		    
* resultCLR			 点云数据
* window			 滤波窗口，范围2 - 7
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int CloudFilter1(VSensorLaserResultCLR^ resultCLR, int window);
/******************************************************************
* 名称：			 CloudFilter2
* 功能：			 点云滤波2
* 入口参数：		    
* resultCLR			 点云数据
* window			 滤波窗口，范围2 - 7
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int CloudFilter2(VSensorLaserResultCLR^ resultCLR, int window);
/******************************************************************
* 名称：			 SetDownsampling
* 功能：			 设置降采样
* 入口参数：		    
* rate				 采样间隔，单位为mm，范围0.1 - 2.0，如每隔0.2mm采一个点，rate = 0.2(注:PSN3000系列采样间隔范围0.1 - 10.0)
* isOpen			 降采样开关
* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
* *****************************************************************/
int SetDownsampling(float rate, bool isOpen);
/*******************************************************************
*名称：              GetImageResolution
*功能：              获取输出图像分辨率
*入口参数：			 
width                图像分辨率宽
height               图像分辨率高
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetImageResolution(int% width, int% height);
/*******************************************************************
*名称：              GetDevTemperature
*功能：              获取传感器温度
*入口参数：			 
devTemperature       传感器温度
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetDevTemperature(float% devTemperature);
/*******************************************************************
*名称：              GetLaserTemperature
*功能：              获取激光器温度
*入口参数：
laserTemperature     激光器温度
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetLaserTemperature(float% laserTemperature);
/*******************************************************************
*名称：              SetROI
*功能：              设置ROI感兴趣区域
*入口参数：
offsetX		         起始坐标X，仅支持32倍数
offsetY              起始坐标Y
width			     区域宽，仅支持32倍数，最小宽度为32
height				 区域高，仅支持16倍数，最小高度为32
isOpen			     ROI开关
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetROI(int offsetX, int offsetY, int width, int height, bool isOpen);
/*******************************************************************
*名称：              ResetFrameTimeStamp
*功能：              复位图像采集时间戳
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ResetFrameTimeStamp();
/*******************************************************************
*名称：              SetCaptureMode
*功能：              设置相机采集模式
*入口参数：		      
flag                 0:采集预览模式(输出预览图的分辨率随设置改变)  1:软件触发采集点云模式  2:硬件触发采集点云模式  3:采集预览模式(输出预览图为满分辨率)，默认为采集预览模式(输出预览图的分辨率随设置改变)。
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetCaptureMode(int flag);
/*******************************************************************
*名称：              GetRunningStatus
*功能：              获取相机后台运行状态
*入口参数：
runningStatusCLR     相机后台运行状态结构体
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetRunningStatus(VSensorLaserCameraRunningStatusCLR^% runningStatusCLR);
/*******************************************************************
*名称：              SingleRestruction
*功能：              单次重建
*入口参数：			 
flag                 0:全量输出(预留接口)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SingleRestruction(int flag);
/*******************************************************************
*名称：              ContinuousRestructionStart
*功能：              开始3D重建连续模式
*入口参数：			 
flag                 0:全量输出(预留接口)
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ContinuousRestructionStart(int flag);
/*******************************************************************
*名称：              ContinuousRestructionStop
*功能：              结束3D重建连续模式
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ContinuousRestructionStop();
/*******************************************************************
*名称：              CaptureFrame
*功能：              获取一帧点云数据
*入口参数：			 
resultCLR            点云数据结果
ctime                最大延时时间，单位ms
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int CaptureFrame(int ctime);
/*******************************************************************
*名称：              GetRestructionResult
*功能：              获取采集的3D点云
*入口参数：			 
resultCLR            点云数据结果
*出口参数：          成功返回0.否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetRestructionResult(VSensorLaserResultCLR^% resultCLR);
/*******************************************************************
*名称：              SetExternalTriggerMode
*功能：              设置外部触发模式
*入口参数：
flag                 0:外触发模式  1:计数器模式
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetExternalTriggerMode(int flag);
/*******************************************************************
*名称：              SetExternalTriggerDelay
*功能：              设置外部触发延时
*入口参数：
delayTime            延迟时间，单位为us，范围0 - 1000
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetExternalTriggerDelay(int delayTime);
/*******************************************************************
*名称：              SetExternalTriggerType
*功能：              设置外部触发种类
*入口参数：
flag                 0:上升沿触发  1:下降沿触发
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetExternalTriggerType(int flag);
/*******************************************************************
*名称：              SetExternalTriggerCounterTriggers
*功能：              设置外部触发计数器触发数量设定值
*入口参数：
value                计数器触发数量设定值，范围1 - 1024
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetExternalTriggerCounterTriggers(int value);
/*******************************************************************
*名称：              GetExternalTriggerCurrentCounterTriggers
*功能：              获取外部触发计数器实时触发数量
*入口参数：
count                计数器触发数量
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetExternalTriggerCurrentCounterTriggers(int% count);
/*******************************************************************
*名称：              ResetExternalTriggerCounterTriggers
*功能：              复位外部触发计数器
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ResetExternalTriggerCounterTriggers();
/*******************************************************************
*名称：              SetCloudBufferNum
*功能：              设置点云缓存区数量
*入口参数：			 
num                  点云缓存区数量，默认10
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SetCloudBufferNum(int num);
/*******************************************************************
*名称：              ClearCloudBuffer
*功能：              清空点云缓存区
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int ClearCloudBuffer();
/*******************************************************************
*名称：              GetCloudBuffer
*功能：              获取缓存区点云
*入口参数：			 
result               缓存区的点云数据数组
iNums                缓存区的点云数据数量
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetCloudBuffer(List<VSensorLaserResultCLR^>^% result, int% iNums);
/*******************************************************************
*名称：              Record3DCloud
*功能：              录制点云
*入口参数：			 
filePath             保存点云文件路径，支持格式pcd、ply、txt。(注:最多能录制5000帧点云数据，错误路径默认不保存点云)
flag				 0:无点云录制  1:以固定距离点云录制  2:以移动速度点云录制
para                 以固定距离点云录制模式下为间隔距离，以移动速度点云录制模式下为移动速度
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int Record3DCloud(String^ filePath, int flag, float para);
/*******************************************************************
*名称：              GetRecord3DCloud
*功能：              获取录制点云
*入口参数：
cloud                录制点云，x y z
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int GetRecord3DCloud(List<Tuple<float, float, float>^>^% cloud);
/*******************************************************************
*名称：              Save3DCloud
*功能：              保存点云
*入口参数：			 
filePath             保存点云文件路径，支持格式pcd、ply、txt
resultCLR            点云数据结果
flag                 0:无序点云  1:有序点云
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int Save3DCloud(String^ filePath, VSensorLaserResultCLR^ resultCLR, int flag);
/*******************************************************************
*名称：              SaveGrayMap
*功能：              保存灰度图
*入口参数：			 
filePath             保存灰度图文件路径，支持格式png、jpg、bmp
resultCLR            点云数据结果
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int SaveGrayMap(String^ filePath, VSensorLaserResultCLR^ resultCLR);
/*******************************************************************
*名称：              CameraOut
*功能：              获取相机采集
*入口参数：			 
imgBuffer            存储采集的灰度图像数据，分辨率为相应相机的输出分辨率
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int CameraOut(array<BYTE>^% imgBuffer);
/*******************************************************************
*名称：              RegisterCallbackFuncGetResult
*功能：              注册获取重建结果回调函数
*入口参数：
event                回调函数事件，当相应的事件发生时，所指向的函数会被调用
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int RegisterCallbackFuncGetResult(CallbackFuncGetResult^ event);
/*******************************************************************
*名称：              DeviceUnInit
*功能：              设备反初始化
*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int DeviceUnInit();
/*******************************************************************
*名称：              setCallbackFuncGetResultBufferCount
*功能：              设置获取重建结果回调函数缓存区预缓存数量
*入口参数：
count				 缓存数量，范围1 - 100，默认20
*出口参数：          成功返回0.否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
*******************************************************************/
int setCallbackFuncGetResultBufferCount(int count);